/*	Nama file		: command.h
	Deskripsi		: Deklarasi type dan prototype primitif mesin Command
	Nama pembuat	: Karina Novita Suryani/ 23512187
	Hari / Tanggal	: Kamis, 4 Oktober 2012
*/

#ifndef command_H
#define command_H

#include "../Calendar/Calendar.h"


enum {INIT, CREATED, QUIT} mainState;
/* status dari main yang menandakan berjalannya command*/
/* INIT : Kalender belum diinisiasi */
/* CREATED : Kalender telah diinisiasi */
/* QUIT : Program berhenti */

/*** Parse dan Execute Command ***/
void parseCommand(char* src, char* delimiter, char** tokenCommand, int *i);
/* Proses : Memparsing command yang dimasukkan menjadi array of command */
/* I.S. src dan delimiter tidak mungkin kosong */
/* F.S. src telah terparsing menjadi array of command pad tokenCommand dan i bernilai jumlah argumen command */

void executeCommand(ListCal *C, char** tokenCommand, int countCommand);
/* Proses : mengeksekusi command yang dimasukkan oleh user kepada C */
/* I.S. Command user telah ditokenisasi menjadi array of command dan telah terhitung jumlah commandnya*/
/* F.S. command user tereksekusi berdasarkan jenis commanndnya*/

/*** Main CRUD ***/
void CreateCalender(ListCal *C);
/* Proses : membuat kalender kosong */
/* I.S. sembarang */
/* F.S. kalender kosong terbentuk */

void AddNewEvent(ListCal *C);
/* Proses : menambahkan event baru ke dalam kalender*/
/* I.S. sembarang */
/* F.S. event baru dibaca dan dimasukkan ke dalan kalender*/

void EditEvent(ListCal *C, int ENum);
/* Proses : mengedit event dengan nomor Enum ke dalam kalender*/
/* I.S. C mungkin kosong, event dengan nomor Enum mungkin tidak ada di kalender*/
/* F.S. Jika C kosong atau tidak ada event dengan nomor ENum maka munculkan pesan kesalahan
		jika ada, event ENum telah diedit*/

void DeleteEvent(ListCal *C, int ENum);
/* Proses : menghapus event dengan nomor Enum ke dalam kalender*/
/* I.S. C mungkin kosong, event dengan nomor Enum mungkin tidak ada di kalender*/
/* F.S. Jika C kosong atau tidak ada event dengan nomor ENum maka munculkan pesan kesalahan
		jika ada, event ENum telah dihapus*/

/*** Main View ***/
void ViewByEventNo(ListCal C, int ENum);
/* Proses : Menampilkan event dengan nomor Enum di dalam C */
/* I.S. C mungkin kosong*/
/* F.S. Event dengan nomor Enum tampil di layar*/
void ViewFirstNRows(ListCal C, int N);
/* Proses: Menampilkan N event pertama di dalam C */
/* I.S. C mungkin kosong */
/* F.S. Event sebanyak N pertama tampil di layar */
void ViewLastNRows(ListCal C, int N);
/* Proses: Menampilkan N event terakhir di dalam C */
/* I.S. C mungkin kosong */
/* F.S. Event sebanyak N terakhir tampil di layar */
void ViewAll(ListCal C);
/* Proses: Menampilkan semua event di dalam C dalam bentuk kalender */
/* I.S. C mungkin kosong */
/* F.S. Semua event tampil di layar dalam bentuk kalender */

/*** Save/Load File ***/
 void SaveFile(ListCal C, char* FileName);
 /* Proses: Menyimpan kalender ke dalam file */
/* I.S. sembarang */
/* F.S. kalender telah disimpan ke dalam file dengan nama FileName.txt */
 
 void LoadFile(ListCal *C, char* FileName);
 /* Proses: membaca FileName.txt dan memasukkan isinya ke dalam kalender */
/* I.S. sembarang */
/* F.S. Jika FileName.txt ada maka isi FileName.txt dimasukkan ke dalam kalender 
		Jika tidak, muncul pesan kesalahan*/
 
 /*** Primitif lain ***/
 void Quit(ListCal *C);
 /* Proses: Mengganti status mainState*/
/* I.S. sembarang */
/* F.S. mainSTate = QUIT */

 
#endif

